var aoPostLoadFormCallback = aoPostLoadFormCallback || {}; var aoPostSubmitFormCallback = aoPostSubmitFormCallback || {}; var _aoFormLoader = (function(w){ var stylesLoaded = false; var captchaLoaded = false; var gfLoaded = false; var htmlId = false; var formsLoadedCount = 0; var formsCount = 0; var scheme = document.location.protocol + "//"; function populateDateField(inputElem, value) { if(!value || !inputElem) { return; } var dateWrapper = inputElem.parentElement; var dateElements = dateWrapper.querySelectorAll('input.ao-form-field-date'); var amPm; if (value.indexOf("AM")) { value = value.replace("AM", ""); amPm = "AM"; } else if (value.indexOf("PM")) { value = value.replace("PM", ""); amPm = "PM"; } var dateFormat = value.split(/[:\/\s]+/); // Populate all date input fields dateElements.forEach(function(elem, index) { elem.value = dateFormat[index] || ''; }); // Populate AM/PM dropdown if(amPm && dateWrapper.querySelector("option[value='" + amPm + "']")) { dateWrapper.querySelector("option[value='" + amPm + "']").selected = true; } } var loadForm = function(options){ formsCount += 1; //increment for each form that is on the page loadStylesheet(options); var previewMarkup = '

Unable to preview form, it has reached the submission cap or expired.

'; var oReq = new XMLHttpRequest(); oReq.onload = function (e) { var response; if (e.target.responseType === 'json') { response = e.target.response || false; } else { response = (e.target.response) ? JSON.parse(e.target.response) : false; } if(!response){ return false; } else if (response && typeof response.processedTemplate === 'undefined' && response.linkURL && response.linkURL != '') { window.location = response.linkURL; return false; } var idArr = options.id.split(":"); htmlId = (options.uniqueId) ? options.id + options.uniqueId : options.id; divId = (options.uniqueId) ? idArr[0] + options.uniqueId : idArr[0]; var existingDiv = document.getElementById('aoform-' + divId); if(existingDiv) existingDiv.parentNode.removeChild(existingDiv); var div = document.createElement('div'); var scriptTag = document.getElementById('aoform-script-' + htmlId); div.id = 'aoform-' + divId; div.style.visibility = "hidden"; scriptTag.parentNode.insertBefore(div, scriptTag); div.innerHTML = response && response.processedTemplate ? response.processedTemplate : previewMarkup; formsLoadedCount += 1; //increment for when a form is loaded onto the page if(response.formProperties && ! response.formProperties.invalidDomain){ //Set referrer div.querySelector("input[name='ao_refurl']").value = document.referrer; div.querySelector("input[name='ao_target']").value = window.location.href; div.querySelector("input[name='ao_refemail']").value = getParameterByName("aoRefEmail"); div.querySelector("input[name='ao_campid']").value = getParameterByName("cmpid"); div.querySelector("input[name='ao_gatedpage']").value = getParameterByName("ao_gatedpage"); div.querySelector("input[name='ao_gatedasset']").value = getParameterByName("ao_gatedasset"); var ajaxSubmit = response && response.formProperties && response.formProperties.hasAjaxResponse ? response.formProperties.hasAjaxResponse : false; loadCaptcha(); updateTabIndexes(); loadGoogleFonts(); formValidationEvents(div, ajaxSubmit); // Form Prefill if ( response.prefill && Object.keys( response.prefill ).length > 0 ) { var fields = Object.keys( response.prefill ); fields.forEach( function( field ) { var input = div.querySelector("input[name='" + field + "']"); var select = div.querySelector("select[name='" + field + "']"); var textarea = div.querySelector("textarea[name='" + field + "']"); if ( ! input && ! select && ! textarea ) { return; } if(input){ if(input.type== "radio"){ var radios = div.querySelectorAll("input[name='" + field + "']"); for(var i = 0; i 1) { var actonForms = document.querySelectorAll("form.ao-form"); var startingTabIndex = 100; for(var i = 1; i -1 ) { formId = formId.substr(0, formId.indexOf(':')); } if(options.uniqueId){ formId += (options.uniqueId) ? options.uniqueId : ''; } var formByID = document.getElementById("aoform-" + formId); watchFields.forEach( function ( field ) { var fieldElm = document.getElementById(field) if(!fieldElm){ fieldElm = formByID.querySelector("#block-" + field); } if(fieldElm){ if(fieldElm.nodeName == "DIV" && fieldElm.classList.contains("ao-combo-layout")) { var radios = fieldElm.querySelectorAll("input[type='radio'],input[type='checkbox']"); fact.data[field] = ""; for (var i = 0; i < radios.length; i++) { if (radios[i].checked) { fact.data[field] += radios[i].value; } } }else if(fieldElm.nodeName=="DIV" && fieldElm.classList.contains("ao-date-block")) { /* Get parent div of a date control, then get all "ao-form-field-date" objects from that div Build a date object from those, and set as value. If it's an invalid date, value = null Date fields are tagged with id "date--" */ var dtMonth = ""; var dtDay = ""; var dtYear = ""; var txtInputs = fieldElm.querySelectorAll("input[type='text']"); var dtMonth = ""; var dtDay = ""; var dtYear = ""; var txtInputs = fieldElm.querySelectorAll("input[type='text']"); var hasDateError = false; for(var i=0; i < txtInputs.length; i++){ if (txtInputs[i].value == ""){ hasDateError = true; } switch(txtInputs[i].getAttribute("data-format")){ case "DD": dtDay = txtInputs[i].value; break; case "MM": dtMonth = txtInputs[i].value; break; case "YY": dtYear = txtInputs[i].value; break; case "YYYY": dtYear = txtInputs[i].value; break; } } if (!hasDateError){ fact.data[field] = dtYear + dtMonth + dtDay; }else{ fact.data[field] = ""; } } else { fact.data[field] = fieldElm.value; } } }); var body = { payload : { accountId : accountId, key : formId, facts : [fact] } }; var xhr = new XMLHttpRequest(); xhr.open( 'PUT', scheme + options.domain + '/acton/openapi/form/v1/' + options.accountId + '/' + formId + '/factEval' ); xhr.setRequestHeader( 'Content-Type', 'application/json' ); xhr.send( JSON.stringify( body ) ); // Check if the active element lost focus due to conflicting conditionals such as hide / show, // Give focus back if lost focus and not hidden function refocusIfLostFocus(activeEl) { if(activeEl !== document.activeElement && !activeEl.classList.contains("ao-condition-hide")) { activeEl.focus(); } } xhr.onreadystatechange = function() { if ( xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200 ) { // Get element that has focus before hiding/showing elements const activeEl = document.activeElement; var response = JSON.parse(xhr.response); //Go through the non true results first and set base display for(var i=0; i